/**
 * Created by yuji on 2015/10/28.
 */

var fs = require('fs');

var deps = require('../lib/deps'),
    file = require('../lib/file'),
    map = require('../lib/map'),
    util = require('../lib/util'),
    init = require('../lib/init'),
    vc = require('../lib/version-control');

'use strict'

var fileObjCache = {};

//利用版本控制系统分析出更改的文件
var fileListByVc = init('./image');

//读取以前的resourceMap
var mapJson = fs.readFileSync('map.json').toString();
var rm = map.ResourceMap.initFromObj(JSON.parse(mapJson));

//抽取依赖
//因为没有更改的文件自身的依赖是不会改变的
//所以抽取依赖只需要抽取改变的文件的依赖

fileListByVc.forEach(function(item){
    var fileObj = file.genObj(item);
    fileObjCache[item] = fileObj;
    var dep = deps.calDeps(fileObj);
    rm.setDep(item, dep);
})

//生成reverseMap

var reverseMap = map.ReverseMap.genByReourceMap(rm);

//根据reverserMap和变化的文件列表，生成需要更改的列表
var recalFileList = deps.recalFileList(fileListByVc,reverseMap);
//根据resourceMap和变化的文件列表，生成有序依赖表
//也就是需要按序重新构建的文件列表
var orderlyDeps = deps.orderlyDeps(fileListByVc,rm);

//将orderlyDeps里面的东东按序处理，不同组或互相不依赖则可以并行
for(var j =0,length= orderlyDeps.length ;j < length; j++){
    var item = orderlyDeps[j];
    if(!fileObjCache[item]){
        fileObjCache[item] = fileObj.genObj(item);
    }
    //插入所有uri
    // 计算哈希
    // 落到磁盘
    // 将uri写回到map
    (fileObjCache[item]).insertUri(rm);
    (fileObjCache[item]).setHash();
    var name = (fileObjCache[item]).save();
    rm.setUri(item,name);
    fileObjCache[item] = null;
}


rm.toNormalObj();
//将map写入磁盘
rm.save();